package com.pureut.storage.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.pureut.storage.domain.OutboundLog;
import com.pureut.storage.domain.WmsStockInfo;
import com.pureut.storage.dto.*;
import com.pureut.storage.vo.*;
import com.pureut.system.api.vo.QualityFreezeVo;

import java.text.ParseException;
import java.util.List;

/**
 * @author: CM
 * @date: 2023/1/6  13:49
 */

public interface WmsStockInfoService extends IService<WmsStockInfo> {
    /**
     * 根据物料编码和批次号获取仓库信息
     */
    List<WmsStockInfoDto> getStockInfo(WmsStockInfoVo wmsStockInfoVo) throws ParseException;

    /**
     * 远程调用 根据母卷号码查询库存信息
     *
     * @param masterVolumeNumber
     * @return
     */
    MasterVolumeDto selectMasterVolumeList(String masterVolumeNumber);

    /**
     * 远程调用 修改库存卷长
     *
     * @param wmsStockInfoVo
     * @return
     */
    int updateStockInfoById(WmsStockInfoVo wmsStockInfoVo);

    /**
     * 根据物料号码修改单据状态
     */
    boolean updateStatus(WmsStockInfoVo wmsStockInfoVo);

    /**
     * 远程调用 删除库存信息
     *
     * @param truncationMasterVolumeNumber
     * @return
     */
    int deleteStockInfoById(String truncationMasterVolumeNumber);

    /**
     * 查询仓库信息（品质检验冻结查询）
     */
    List<WmsStockInfoDto> getFreezeStockList(QualityFreezeVo qualityFreezeVo);

    /**
     * 仓库状态批量修改
     */
    boolean getUpdate(WarehouseStatusUpdateVo warehouseStatusUpdateVo);

    /**
     * 盘点物料汇总
     */
    List<WmsStockInfoSumDto> sumStock(CheckStockVo checkStockVo);

    /**
     * 库存明细列表
     * @return
     */
    List<WmsStockInfoDto> getList(CheckStockVo checkStockVo);

    /**
     * 盘点中物料
     * @return
     */
    List<WmsStockInfoDto> getAllotList(CheckStockVo checkStockVo);

    /**
     * 修改库存状态更新为“在库”
     */
    boolean updateStockStatus(UpdateStatusVo updateStatusVo);

    /**
     * 库存新增
     * @param wmsStockInfoVo
     * @return
     */
    boolean add(WmsStockInfoVo wmsStockInfoVo);

    /**
     * 物料号码获取仓库明细数据
     */
    List<WmsStockInfoDto> getDataByCategoryAndCode(String materialNumber);

    /**
     * 修正水刺母卷编码
     * @param wmsStockInfoVo
     * @return
     */
    boolean updateSpunlace(WmsStockInfoVo wmsStockInfoVo);

    /**
     *
     * @param moStockInfoVo
     * @return
     */
    List<MoStockDto> getStockInfoMo(MoStockInfoVo moStockInfoVo);

    List<MoStockDto> getPurchase(PurchaseStockVo purchaseStockVo);

    /**
     *  根据物料编码获取该物料在仓库中的净重之和(feign调用)
     */
    String getSum(String materialCode);

    /**
     * 根据物料编码获取库存重量（feign调用 委外入库页面使用）
     */
    double getStockWeight(String materialCode);

    /**
     * 根据物料号码修改库存状态为冻结
     */
    void updateStatusThaw(String materialNumber);

    /**
     * 查询基础信息（feign调用 物料追溯页面使用）
     * @param wsiCategory, wsiMaterialNumber
     * @return
     */
    List<RetrospectManageDto> getRetrospectManageList(Long wsiCategory,String wsiMaterialNumber);

    /**
     * 查询同批次物料 （feign调用 物料追溯页面使用）
     * @param wsiMaterialNumber 根据物料号码查询
     * @return
     */
    List<RetrospectMaterialDto> getRetrospectMaterialList(String wsiMaterialNumber);

    /**
     * 查询同批次物料 （feign调用 产品追溯页面使用）
     * @param wsiMaterialNumber 根据物料号码查询
     * @return
     */
    List<RetrospectMaterialDto> getRetrospectProductList(String codingType, String wsiMaterialNumber);


    /**
     * 查询产品追溯基础信息（feign调用 产品追溯页面使用）
     * @param wsiMaterialNumber
     * @return
     */
    List<ProductTraceabilityDto> getProductTraceabilityList(String codingType, String wsiMaterialNumber);

    /**
     * 查询物料履历
     * @param wsiMaterialNumber
     * @return
     */
    List<MaterialResumeDto> MaterialResumeList(Long wsiCategory, String wsiMaterialNumber);

    /**
     * 查询产品履历
     * @param wsiMaterialNumber
     * @return
     */
    List<MaterialResumeDto> getProductPersonalDetails(String codingType, String wsiMaterialNumber);

    /**
     * 库存汇总
     * @param wmsStockInfoVo
     * @return
     */
    List<InventorySummaryDto> getInventorySummaryList(WmsStockInfoVo wmsStockInfoVo);

    /**
     * 原料明细
     * @param wmsStockInfoVo
     * @return
     */
    List<DetailsMaterialsDto> getInventoryMaterialDetailed(WmsStockInfoVo wmsStockInfoVo);

    /**
     * 辅料明细
     * @param wmsStockInfoVo
     * @return
     */
    List<DetailsMaterialsDto> getInventoryAccessoriesDetailed(WmsStockInfoVo wmsStockInfoVo);

    /**
     * 成品明细
     * @param wmsStockInfoVo
     * @return
     */
    List<DetailsMaterialsDto> getInventoryFinishProductDetailed(WmsStockInfoVo wmsStockInfoVo);

    /**
     * 半成品明细
     * @param wmsStockInfoVo
     * @return
     */
    List<DetailsMaterialsDto> getInventoryMaterialHalfDetailed(WmsStockInfoVo wmsStockInfoVo);

    /**
     * 废料明细
     * @param wmsStockInfoVo
     * @return
     */
    List<DetailsMaterialsDto> getInventoryWasteDetailed(WmsStockInfoVo wmsStockInfoVo);

    /**
     *
     * @param outsourceSumVo
     * @return
     */
    List<OutsourceSumDto> outsourceSum(OutsourceSumVo outsourceSumVo);

    /**
     * 根据母卷号码删除仓库数据（fegin调用）
     */
    void deleteByMasterVolumeNum(String masterVolumeNum);

    /**
     * 根据母卷号码查询母卷信息
     * @param wsiMaterialNumber
     * @return
     */
    OutboundLog selectProductStockInfoById(String wsiMaterialNumber);

    /**
     * 品质处理修改对应物料等级
     */
    boolean updateMaterialGrade(UpdateGradeVo updateGradeVo);

    /**
     * 消息提醒-最小安全库存
     */
    void maxStock() throws Exception;

    /**
     * 消息提醒-保质期告警
     */
    void expirationDate() throws Exception;

    /**
     * 消息提醒-复检
     */
    void recheck() throws Exception;
}

